//
// Created by madison on 2022/1/9.
//
#include <iostream>
#include <ctime>
#include <unistd.h>

using namespace std;

int main() {

    //当前日期和时间
    // 基于当前系统的当前日期/时间
    time_t now = time(nullptr);

    // 把 now 转换为字符串形式
    char *dt = ctime(&now);

    cout << "本地日期和时间：" << dt << endl;

    // 把 now 转换为 tm 结构
    tm *gmtm = gmtime(&now);
    dt = asctime(gmtm);
    cout << "UTC 日期和时间：" << dt << endl;

    //使用结构 tm 格式化时间
    cout << "1970 到目前经过秒数:" << now << endl;
    tm *ltm = localtime(&now);
    // 输出 tm 结构的各个组成部分
    cout << "年: " << 1900 + ltm->tm_year << endl;
    cout << "月: " << 1 + ltm->tm_mon << endl;
    cout << "日: " << ltm->tm_mday << endl;
    cout << "时间: " << ltm->tm_hour << ":";
    cout << ltm->tm_min << ":";
    cout << ltm->tm_sec << endl;


    time_t seconds;

    seconds = time(nullptr);
    printf("自 1970-01-01 起的小时数 = %ld\n", seconds / 3600);

    time_t rawtime;
    struct tm *info;
    char buffer[80];

    time(&rawtime);

    info = localtime(&rawtime);
    printf("当前的本地时间和日期：%s", asctime(info));
    //	size_t strftime();
    //  该函数可用于格式化日期和时间为指定的格式。
    strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", info);
    printf("格式化的日期 & 时间 : |%s|\n", buffer);

    time_t start_t, end_t;
    double diff_t;

    printf("程序启动...\n");
    time(&start_t);

    printf("休眠 5 秒...\n");
    sleep(5);

    time(&end_t);
    // double difftime ( time_t time2, time_t time1 );
    // 该函数返回 time1 和 time2 之间相差的秒数。
    diff_t = difftime(end_t, start_t);

    printf("执行时间 = %f\n", diff_t);
    printf("程序退出...\n");

    return 0;
}